package lab3;

import org.junit.Test;

public class Triangle {

    /**
     * 判断一个整数是否在0-200
     *
     * @param i
     * @return
     */
    public boolean isOutOfRange(int i) {
        if (i > 200 || i <= 0) {
            return false;
        }
        return true;
    }

    /**
     * 判断3条边是否合法
     *
     * @param a
     * @param b
     * @param c
     * @return
     */
    public boolean isLegal(int a, int b, int c) {
        return isOutOfRange(a) && isOutOfRange(b) && isOutOfRange(c);
    }

    /**
     * 判断两条边之和是否大于第三边
     *
     * @param x
     * @param y
     * @param z
     * @return
     */
    public boolean isSumBigger(int x, int y, int z) {
        return x + y > z && x + z > y && y + z > x;
    }

    /**
     * 判断三条边是否能够组成三角形
     *
     * @param a
     * @param b
     * @param c
     * @return
     */
    public boolean isTriangle(int a, int b, int c) {
        return isSumBigger(a, b, c);
    }

    /**
     * 判断两条边是否相等
     *
     * @param x
     * @param y
     * @return
     */
    public boolean isEquals(int x, int y) {
        return x == y;
    }

    /**
     * 求三角形有几条边相等
     *
     * @param x
     * @param y
     * @param z
     * @return
     */
    public int howManyEquals(int x, int y, int z) {
        if (isEquals(x, y) && isEquals(y,z)) {
            return 3;
        }
        if (isEquals(x, y) || isEquals(x,z) || isEquals(y,z)) {
            return 2;
        }
        return 0;
    }

    /**
     * 判断是否满足两边平方之和是否等于第三边的平方
     *
     * @param x
     * @param y
     * @param z
     * @return
     */
    public boolean isPowerSumEquals(int x, int y, int z) {
        return x * x + y * y == z * z || x * x + z * z == y * y || y * y + z * z == x * x;
    }

    /**
     * 判断第一个数是否比第二个数大
     * @param x
     * @param y
     * @return
     */
    public boolean isGreaterThan(int x, int y) {
        return x > y;
    }

    /**
     * 判断是否是直角三角形
     * @param a
     * @param b
     * @param c
     * @return
     */
    public boolean isRightTriangle(int a,int b,int c){
        return isPowerSumEquals(a,b,c);
    }

    /**
     * 判断三角形的类型，返回值:
     * 1、不能组成三角形
     * 2、等边三角形
     * 3、等腰三角形
     * 4、直角三角形
     * 5、一般三角形
     * 6、某些边不满足限制
     * @param a
     * @param b
     * @param c
     * @return
     */
    public int triangleType(int a,int b,int c){
        //边是否合法
        if (!isLegal(a,b,c)){
            return 6;
        }
        //判断是否能组成三角形
        if(!isTriangle(a,b,c)){
            return 1;
        }
        //有多少条边相等
        int equlsSide = howManyEquals(a, b, c);
        //等边
        if (equlsSide == 3){
            return 2;
        }
        //等腰
        else if(equlsSide == 2){
            return 3;
        }
        //直角
        if (isRightTriangle(a,b,c)){
            return 4;
        }
        //一般三角形
        return 5;
    }
}
